﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using Microsoft.Reporting.WebForms;
using System.Globalization;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_Certificate : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    //btnGuardarDocente.Attributes.Add("onclick", "this.disabled=true,this.value='Procesando...';" + ClientScript.GetPostBackEventReference(btnGuardarDocente, null) + ";");
                    lblvalida.Text = "";
                    lblvalida.Visible = false;
                    
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
            else
            {
                lblvalida.Text = "";
                lblvalida.Visible = false;
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (txtBuscar.Text==string.Empty)
            {
                ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('DEBE INGRESAR UN NUMERO DE CÉDULA')", true);    
            }
            else
            {
                Usuarios oUsu = new Usuarios();
                oUsu.documento = txtBuscar.Text;
                List<Usuarios> lista = new List<Usuarios>();
                lista = oUsu.Certificado();
                if (lista[0].nombresYApellidos == "nocumplerequisito")
                {
                    lblvalida.Text = "EL ALUMNO NO CUMPLE EL REQUISITO PARA OBTENER EL CERTIFICADO";
                    lblvalida.Visible = true;
                    lblvalida.ForeColor = System.Drawing.Color.Red;
                    txtBuscar.Text = string.Empty;
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('EL ALUMNO SELECCIONADO NO CUMPLE EL REQUISITO PARA OBTENER EL CERTIFICADO')", true);
                }
                else
                {
                    lblvalida.Text = "CERTIFICADO GENERADO CORRECTAMENTE";
                    lblvalida.Visible = true;
                    lblvalida.ForeColor = System.Drawing.Color.Green;
                    CrearReporte();
                    txtBuscar.Text = string.Empty;
                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeBien('CERTIFICADO GENERADO CORRECTAMENTE')", true);
                }
            }
           
        }

        private void CrearReporte()
        {
            EspamIdiomasDataSet11.sp_certificadoAprobacionValidoDataTable dt = new EspamIdiomasDataSet11.sp_certificadoAprobacionValidoDataTable();
             EspamIdiomasDataSet11TableAdapters.sp_certificadoAprobacionValidoTableAdapter da = new EspamIdiomasDataSet11TableAdapters.sp_certificadoAprobacionValidoTableAdapter();
            NumeroCertificaciones _objNumeroCertificaciones = new NumeroCertificaciones();
            var datosAlumno = _objNumeroCertificaciones.getAlumnoCedula(txtBuscar.Text);
            var dff = da.GetData(txtBuscar.Text).ToList();
            da.Fill(dt, txtBuscar.Text);
            int contador = 0;
            foreach (var item in dff)
            {
                contador++;
            }
            ReportViewer viewer = new ReportViewer();
            ReportDataSource RD = new ReportDataSource();
            RD.Value = dt;
            RD.Name = "DataSet1";
            //viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/AlumnosLListado.rdlc");
            viewer.LocalReport.DataSources.Clear();
            viewer.LocalReport.DataSources.Add(RD);
            //viewer.LocalReport.ReportEmbeddedResource = "Certificado.rdlc";
            viewer.LocalReport.ReportPath = Server.MapPath("Reports/Administradores/Certificado.rdlc");
            viewer.LocalReport.Refresh();
            CultureInfo ci = new CultureInfo("es-Es");
            string date = CapitalizeFirstLetter(ci.DateTimeFormat.GetDayName(DateTime.Today.DayOfWeek)) + " " + DateTime.Today.Day + " de " + CapitalizeFirstLetter(ci.DateTimeFormat.GetMonthName(DateTime.Now.Month)) + ", " + DateTime.Today.Year;
            var numero = _objNumeroCertificaciones.getUltimoNumeroCertificacion();
            int _numeroCertificacion = 0;
            if (numero>0)
            {
                _numeroCertificacion = numero + 1;
            }
            else
            {
                _numeroCertificacion = 1;
            }
            int decimalLength = 0;
            string numeroCeros = "";
            if (_numeroCertificacion.ToString().Length==1)
            {
                decimalLength = _numeroCertificacion.ToString("D").Length + 2;
                numeroCeros = _numeroCertificacion.ToString("D"+decimalLength.ToString());
            }
            else if (_numeroCertificacion.ToString().Length==2)
            {
                decimalLength = _numeroCertificacion.ToString("D").Length + 1;
                numeroCeros = _numeroCertificacion.ToString("D" + decimalLength.ToString());
            }
            else
            {
                decimalLength = _numeroCertificacion.ToString("D").Length;
                numeroCeros = _numeroCertificacion.ToString("D" + decimalLength.ToString());
            }
            string codigo = "CE-" + numeroCeros + "-" + DateTime.Now.Year.ToString().Substring(1, 3) + "-" + contador;
            string mensaje = _objNumeroCertificaciones.ingresoNumeroCertificacion(_numeroCertificacion,"CE",Convert.ToInt32(Session["idUsuEspamIdiomasVarSession004"]),DateTime.Now,codigo,txtBuscar.Text);
            if (mensaje=="OK")
            {
                    ReportParameter[] parametro = new ReportParameter[2];
                    parametro[0] = new ReportParameter("fecha", date);
                    parametro[1] = new ReportParameter("codigo", codigo);
                    viewer.LocalReport.SetParameters(parametro);

                    string mimeType;
                    string encoding;
                    string fileNameExtension;
                    string[] streams;
                    Warning[] warnings;
                    byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

                    this.Response.Clear();
                    this.Response.ContentType = "application/pdf";
                    this.Response.AddHeader("Content-disposition", "attachment; filename=Certificado.pdf");
                    this.Response.BinaryWrite(pdfContent);
                    this.Response.End();
                    txtBuscar.Text = string.Empty;
            }
           
        }
        private string CapitalizeFirstLetter(string val)
        {
            return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(val);

        }
    }
}